#ifndef MAINWINDOW_H
#define MAINWINDOW_H

//Библиотека Qt.
#include <QMainWindow>
#include <QPointer>


//Объявление внешних классов.
class DevManager;
class VidDevice;
class VidWidget;
class QLabel;


class MainWindow : public QMainWindow
{
	Q_OBJECT
public:
	//Конструктор.
	MainWindow(QWidget *parent = NULL);

	//Деструктор.
	virtual ~MainWindow() {}

protected:
	//Событие нажатия клавиши.
	void keyPressEvent(QKeyEvent *event);

	//Событие двойного щелчка кнопки мыши.
	void mouseDoubleClickEvent(QMouseEvent *event);

	//Событие нажатия кнопки мыши.
	void mousePressEvent(QMouseEvent *event);

	//Событие отпускания кнопки мыши.
	void mouseReleaseEvent(QMouseEvent *event);

private:
	//Рабочая область главного окна приложения.
	QWidget *mainWidget;

	//Менеджер видеоустройств.
	DevManager *devManager;

	//Видеоокно, над которым производится процесс перемещения.
	VidWidget *dragVidWdg;

	//Режим одного видеоокна.
	bool oneWindowMode;

	QLabel *logoLabel;

	//Функция возврата списка видеоокон.
	QList<VidWidget *> getVideoWindowsList();

	//Функция вывода видеоокон.
	void showVideoWindows();

	//Функция скрытия видеоокон.
	void hideVideoWindows();

	//Функция вывода логотипа.
	void showLogo();

private slots:
	//Слот подключения новых устройств.
	void slotDevicesConnect(const QList<VidDevice *> &viddevlist);

	//Слот отключения устройств.
	void slotDevicesDisconnect(const QList<int> &devindexlist);

	//Слот смены типа видеоокон.
	void slotVidWinTypeChange(const QString &vidwintype);

	//Слот вывода сообщений.
	void slotInformationShow(const QString &msg);

	//Слот вывода предупреждений.
	void slotWarningShow(const QString &msg);

	//Слот вывода ошибок.
	void slotCriticalShow(const QString &msg);

};

#endif
